package com.thh.distributelock.redis;

import org.redisson.Redisson;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;

public class RedssionLock {

	/*
	*  导入redission的包
	*  <dependency>
		 <groupId>org.redisson</groupId>
		 <artifactId>redisson</artifactId>
		 <version>3.9.1</version>
	 </dependency>
	* */


    //zookeeper 分布锁

    public static RLock getLock() {
        //定义一个配置，在redssion有类RLock，实现分布式锁
        Config config = new Config();
        //指定使用单节点部署方式
        //单机
        config.useSingleServer().setAddress("redis://127.0.0.1:6379");//.setPassword("mkxiaoer");

        //主从
        /*config.useMasterSlaveServers()
                .setMasterAddress("127.0.0.1:6379")
                .addSlaveAddress("127.0.0.1:6389", "127.0.0.1:6332", "127.0.0.1:6419")
                .addSlaveAddress("127.0.0.1:6399");*/

        //哨兵
        /*config.useSentinelServers()
                .setMasterName("mymaster")
                .addSentinelAddress("127.0.0.1:26389", "127.0.0.1:26379")
                .addSentinelAddress("127.0.0.1:26319");*/

        //集群
       /* config.useClusterServers()
                .setScanInterval(2000) // cluster state scan interval in milliseconds
                .addNodeAddress("127.0.0.1:7000", "127.0.0.1:7001")
                .addNodeAddress("127.0.0.1:7002");*/


        config.useSingleServer().setConnectionPoolSize(500);//设置对于master节点的连接池中连接数最大为500
        config.useSingleServer().setIdleConnectionTimeout(10000);//如果当前连接池里的连接数量超过了最小空闲连接数，而同时有连接空闲时间超过了该数值，那么这些连接将会自动被关闭，并从连接池里去掉。时间单位是毫秒。
        config.useSingleServer().setConnectTimeout(30000);//同任何节点建立连接时的等待超时。时间单位是毫秒。
        config.useSingleServer().setTimeout(3000);//等待节点回复命令的时间。该时间从命令发送成功时开始计时。
        config.useSingleServer().setPingTimeout(30000);

        //获取RedissonClient对象
        RedissonClient redisson = Redisson.create(config);
        //获取锁对象
        RLock rLock = redisson.getLock("lock.lock");
        return rLock;
    }

    public static void main(String[] args) {
        System.out.println(getLock());
    }
}
